﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bibilioteca.DataAccess;
using Bibilioteca.Models;
using System.Data;

namespace Bibilioteca.Dominio
{
    public class NegocioTiposMateriales
    {

        private TiposMaterialesDao tiposMaterialesDao;

        public NegocioTiposMateriales()
        {
            tiposMaterialesDao = new TiposMaterialesDao();
        }

        /*
         * Genera a partir de un dataTable un LinkedList.
         * Esto es simplemente porque desde la vista no se puede iterar
         * sobre un datatable, se necesita una coleccion de tiposMateriales.
         */
        private LinkedList<TipoMaterial> generarListaTiposMateriales(DataTable tabla)
        {
            LinkedList<TipoMaterial> retorno = new LinkedList<TipoMaterial>();
            foreach (DataRow row in tabla.Rows)
            {
                TipoMaterial s = new TipoMaterial((int)row["tipoMaterial_id"], (string)row["tipoMaterial_nombre"]);
                retorno.AddLast(s);
            }
            return retorno;
        }

        /*
         * Retorna una lista enlazada de todos los tiposMateriales en la BD.
         */
        public LinkedList<TipoMaterial> todosLosTiposMateriales()
        {
            return generarListaTiposMateriales(tiposMaterialesDao.todosLosTiposMateriales());
        }

        /*
         * Retorna el tipo de material de un material dado.
         */
        public TipoMaterial GetTipoMaterialDeMaterial(string id)
        {
            foreach (TipoMaterial m in generarListaTiposMateriales(tiposMaterialesDao.tipoMaterialDeMaterial(id)))
            {
                return m;
            }
            return null;
        }

        /*
         * Dado un numero de tipoMaterial lo busca en la BD y lo retorna.
         */
        public TipoMaterial GetTipoMaterialNumero(string id)
        {
            tiposMaterialesDao.paramID = Convert.ToInt32(id.Trim());
            DataTable tipoMaterialTable = tiposMaterialesDao.GetTipoMaterialNumero();
            foreach (DataRow row in tipoMaterialTable.Rows)
            {
                TipoMaterial s = new TipoMaterial((int)row["tipoMaterial_id"], (string)row["tipoMaterial_nombre"]);
                return s;
            }
            return new TipoMaterial(0, "No existe");
        }

        public void modificarTipoMaterial(TipoMaterial tipoMaterial)
        {
            tiposMaterialesDao.paramID = tipoMaterial.Id;
            tiposMaterialesDao.nombre = tipoMaterial.Nombre;

            if (tipoMaterial != null && tipoMaterial.Id != 0)
                tiposMaterialesDao.modificarTipoMaterial();
        }

        public void insertarTipoMaterial(TipoMaterial tipoMaterial)
        {
            tiposMaterialesDao.nombre = tipoMaterial.Nombre;

            tiposMaterialesDao.insertarTipoMaterial();
        }

        public void eliminarTipoMaterial(int id)
        {
            tiposMaterialesDao.paramID = id;
            if (id != 0)
                tiposMaterialesDao.eliminarTipoMaterial();
        }

    }
}